<?php
namespace app\common\model\base;

use think\Db;
use app\common\model\tools\Pinyin;

/*************************************************
 *ClassName:     Regions
 *Description:   地区模型
 *Others:
 *************************************************/

// 这里Commond模型文件还没有定义
class Regions
{
    /**
     * getName 得到地区名称
     * @karl
     * @DateTime 2016-08-08T12:13:52+0800
     * @param    int                   $id 地区id
     * @return   array                 [error_code, error_msg, data]                
     */
    static public function getName($id)
    {
        $data = DB::name("regions")->where(['id' => $id])->find();
        if ($data) {
            $result['error_code'] = 0;
            $result['error_msg'] = "";
            $result['data'] = $data;
        } else {
            $result['error_code'] = 1;
            $result['error_msg'] = "没有得到地区详情";
        }
        return $result;
    }
    /**
     * getFullname 得到地区全称，包括父级(类似面包屑效果)
     * @karl
     * @DateTime 2016-08-08T12:13:52+0800
     * @param    int                   $id 地区id
     * @return   array                 [error_code, error_msg, data]
     */
    static public function getFullname($id)
    {
        static $result = array();
        $data = DB::name("regions")->where(['id' => $id])->find();
        if ($data) {
            $result['error_code'] = 0;
            $result['error_msg'] = "";
            $result['data'][$id] = $data;
        } else {
            $result['error_code'] = 1;
            $result['error_msg'] = "没有得到地区全称";
        }
        if($data['parent_id'] !== 0){
            self::getFullname($data['parent_id']);
        }
        $result['data'] = array_reverse($result['data'],TRUE);
        return $result;
    }

    /**
     * getChildren 得到子级数据
     * @karl
     * @DateTime 2016-08-08T12:14:44+0800
     * @param    int                   $id    地区id
     * @param    string                $order  排序
     * @return   array                 [error_code, error_msg, data]
     */
    static public function getChildren($id, $order = 'id')
    {
        $data = DB::name("regions")->where(['parent_id' => $id])->order($order)->select();
        if ($data) {
            $result['error_code'] = 0;
            $result['error_msg'] = "";
            $result['data'] = $data;
        } else {
            $result['error_code'] = 1;
            $result['error_msg'] = "没有得到地区详情";
        }
        return $result;
    }
    /**
     * getLevel 分级得到地区名称
     * @xiao
     * @DateTime 2016-08-08T12:13:52+0800
     * @param    int                   $level 地区分级
     * @param    mixed                 $pid   地区父级
     * @param    string                $order  排序
     * @return   array                 [error_code, error_msg, data]                
     */
    static public function getLevel($level, $pid = '', $order = 'id')
    {   
        $where['level'] = $level;
        $where['parent_id'] = $pid;
        $data = DB::name("regions")->where($where)->order($order)->select();
        if ($data) {
            $result['error_code'] = 0;
            $result['error_msg'] = "";
            $result['data'] = $data;
        } else {
            $result['error_code'] = 1;
            $result['error_msg'] = "没有得到地区详情";
        }
        return $result;
    }

    /**
     * updateFirstLetter 更新首字母
     * @karl
     * @DateTime 2016-08-08T12:13:52+0800
     * @param    int       $id          地区id
     * @param    string    $field       地区id，地区名，地区首字母
     * @return   array           [error_code, error_msg, data]
     */
    static public function updateFirstLetter($id = '',$field = 'id,name,first_letter')
    {
        //判断id是否为空，如果不为空则更新指定地区首字母,如果为空则更新所有地区首字母
        
        $result['error_code'] = 0;
        $result['error_msg'] = "";

        if(!empty($id)){
            $where['id'] = $id;
            $data = DB::name("regions")->field($field)->where($where)->find();
            $first_letter['first_letter'] = strtoupper(Pinyin::ChineseToPinyin($data['name']));
            $first_letter['first_letter'] = mb_substr($first_letter['first_letter'], 0, 1 );
            if($first_letter['first_letter'] !== $data['first_letter']){
                $data = DB::name("regions")->where($where)->update($first_letter);
                if ($data) {
                    $result['error_code'] = 0;
                    $result['error_msg'] = "";
                    $result['data'] = $data;
                 } else {
                    $result['error_code'] = 1;
                    $result['error_msg'] = $id."更新失败";
                 }
           }

        } else {
            $data = DB::name("regions")->field($field)->select();
            foreach($data as $key => $value){
                $where['id'] = $value['id'];
                $first_letter['first_letter'] = strtoupper(Pinyin::ChineseToPinyin($value['name']));
                $first_letter['first_letter'] = mb_substr($first_letter['first_letter'], 0, 1 );
                if($first_letter['first_letter'] !== $value['first_letter']){
                    $data = DB::name("regions")->where($where)->update($first_letter);
                    if ($data) {
                        $result['error_code'] = 0;
                        $result['error_msg'] = "";
                        $result['data'] = $data;
                    } else {
                        $result['error_code'] = 1;
                        $result['error_msg'] = $value['id']."更新失败";
                        break;
                    }
               }                

            }
        }
        return $result;
    }

    /**
     * getFirstCharter 获取中文首字母
     * @param $str
     * @return null|string
     */
    /*
    static public function getFirstCharter($regions)
    {
        if (empty($regions)) {
            return '';
        }
        $fchar = ord($regions{0});
        if ($fchar >= ord('A') && $fchar <= ord('z')) return strtoupper($regions{0});
        $s1 = iconv('UTF-8', 'gb2312', $regions);
        $s2 = iconv('gb2312', 'UTF-8', $s1);
        $s = $s2 == $regions ? $s1 : $regions;
        $asc = ord($s{0}) * 256 + ord($s{1}) - 65536;
        if ($asc >= -20319 && $asc <= -20284) return 'A';
        if ($asc >= -20283 && $asc <= -19776) return 'B';
        if ($asc >= -19775 && $asc <= -19219) return 'C';
        if ($asc >= -19218 && $asc <= -18711) return 'D';
        if ($asc >= -18710 && $asc <= -18527) return 'E';
        if ($asc >= -18526 && $asc <= -18240) return 'F';
        if ($asc >= -18239 && $asc <= -17923) return 'G';
        if ($asc >= -17922 && $asc <= -17418) return 'H';
        if ($asc >= -17417 && $asc <= -16475) return 'J';
        if ($asc >= -16474 && $asc <= -16213) return 'K';
        if ($asc >= -16212 && $asc <= -15641) return 'L';
        if ($asc >= -15640 && $asc <= -15166) return 'M';
        if ($asc >= -15165 && $asc <= -14923) return 'N';
        if ($asc >= -14922 && $asc <= -14915) return 'O';
        if ($asc >= -14914 && $asc <= -14631) return 'P';
        if ($asc >= -14630 && $asc <= -14150) return 'Q';
        if ($asc >= -14149 && $asc <= -14091) return 'R';
        if ($asc >= -14090 && $asc <= -13319) return 'S';
        if ($asc >= -13318 && $asc <= -12839) return 'T';
        if ($asc >= -12838 && $asc <= -12557) return 'W';
        if ($asc >= -12556 && $asc <= -11848) return 'X';
        if ($asc >= -11847 && $asc <= -11056) return 'Y';
        if ($asc >= -11055 && $asc <= -10247) return 'Z';
        return null;
    }
    */
    /*
    static public function getFirstCharter()
    {
        $result = Pinyin::ChineseToPinyin('中国', false, true);
        return $result;
    }
    */



}

?>